public uint GetHash(string str)
{
	var ret = 0;
	var sum = 0;
	for (var i = 0; i < str.Length; ++i)
	{
		var c = str[i];
		sum += c;

		var t1 = sum & 0x1F;

		var t2 = 0x20 - t1;
		var t3 = (c >> t2) & 0xFF;
		var t4 = c << t1;

		var v = t3 | t4;
		ret += v;
	}
	return (uint)ret;
}